import os
from multiprocessing import Process
# init进程将系统启动后，init将成为此后所有进程的祖先，此后的进程都是直接或间接从init进程“复制”而来。
# 完成该“复制”功能的函数有fork()和clone()等。python也支持这玩意
# 普通的函数调用，调用一次，返回一次，但是fork()调用一次，返回两次。
# 因为操作系统自动把当前进程（称为父进程）复制了一份（称为子进程），然后，分别在父进程和子进程内返回。
# 子进程永远返回0，而父进程返回子进程的ID。一个父进程可以fork出多个子进程。
# 子进程调用getpid()获得自身ID，调用getppid()就可以拿到父进程的ID。
# print("this process's PID is %s" % os.getpid())
# subprocess_pid = os.fork()
# if(subprocess_pid == 0):
#     print("create subprocess succefully")
#     print("parent process's PID is %s" % os.getppid())
#     print("subprocess's PID is %s" % subprocess_pid)


def run_proc(name):
    print('Run child process %s (%s)...' % (name, os.getpid()))


if __name__ == '__main__':
    print('Parent process %s.' % os.getpid())
    p = Process(target=run_proc, args=('test',))
    print('Child process will start.')
    p.start()
    p.join()
    print('Child process end.')
